package com.study.happystudy.tool;

import java.util.Random;

/**
 * 颜色使用：（1）只需将此工具类【复制到同一个模块】内，直接调用方法即可，例子可以直接复制
 * 例一：ColorChange.blue();System.out.println("Java 是世界上最美丽的语言，这句话是蓝色的");
 * 例二：ColorChange.blue("Java 是世界上最美丽的语言，这句话是蓝色的");//版本新增【new】
 * （2）new ColorChange对象，这样调用的时候可以更改名字
 * 例一：ColorChange cg=new ColorChange;
 * cg.blue();System.out.println("Java 是世界上最美丽的语言，这句话是蓝色的");
 * 例二：ColorChange cg=new ColorChange;
 * cg.blue("Java 是世界上最美丽的语言，这句话是蓝色的");//版本新增【new】
 * （3）后台进程，随机改变main方法打印的颜色//版本新增【new】
 * 例一：new ColorChange().start();
 * ColorChange.testWords();//测试打印语句
 * 例二：ColorChange cg=new ColorChange();
 * cg.start();
 *///ColorChange帮助文档
public class ColorChange extends Thread {
    public ColorChange() {
    }

    @Override
    public synchronized void start() {
        super.setDaemon(true);
        super.setPriority(10);
        super.start();
        try {
            Thread.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public ColorChange(String name) {
        super(name);
    }

    public static void testWords() {
        System.out.println("Java 是世界上最美丽的语言1");
        System.out.println("Java 是世界上最美丽的语言2");
        System.out.println("Java 是世界上最美丽的语言3");
        System.out.println("Java 是世界上最美丽的语言4");
        System.out.println("Java 是世界上最美丽的语言5");
        System.out.println("Java 是世界上最美丽的语言6");
        System.out.println("Java 是世界上最美丽的语言7");
        System.out.println("Java 是世界上最美丽的语言8");
    }

    private static final String[] color = {"\33[30;48;1m",//黑色
            "\33[31;49;1m",//红色
            "\33[32;49;1m",//绿色
            "\33[33;49;1m",//黄色
            "\33[34;49;1m",//蓝色
            "\33[35;49;1m",//紫色
            "\33[36;49;1m",//蓝绿色
            "\33[38;49;1m",//灰色
            "\33[39;49;1m",//白色
            "\33[0m"};//还原
    private static int a = 0;
    private static Random r = new Random();

    public static void random() {
        System.out.print(color[r.nextInt(color.length)]);
    }

    public static void common() {
        a = (a + 1) % color.length;
        System.out.print(color[a]);
    }

    public static void common(int i) {
        a = (a + i) % color.length;
        System.out.print(color[a]);
    }

    public static void black() {
        System.out.print("\33[30;48;1m");
    }

    public static void red() {
        System.out.print("\33[31;49;1m");
    }

    public static void green() {
        System.out.print("\33[32;50;1m");
    }

    public static void yellow() {
        System.out.print("\33[33;50;1m");
    }

    public static void blue() {
        System.out.print("\33[34;50;1m");
    }

    public static void purple() {
        System.out.print("\33[35;50;1m");
    }

    public static void blueGreen() {
        System.out.print("\33[36;50;1m");
    }

    public static void gray() {
        System.out.print("\33[37;50;1m");
    }

    public static void recover() {
        System.out.print("\33[0m");
    }

    public static void Black(String s) {
        System.out.print("\33[30;48;1m" + s + "\33[0m");
    }

    public static void Red(String s) {
        System.out.print("\33[31;48;1m" + s + "\33[0m");
    }

    public static void Green(String s) {
        System.out.print("\33[32;48;1m" + s + "\33[0m");
    }

    public static void Yellow(String s) {
        System.out.print("\33[33;48;1m" + s + "\33[0m");
    }

    public static void Blue(String s) {
        System.out.print("\33[34;48;1m" + s + "\33[0m");
    }

    public static void Purple(String s) {
        System.out.print("\33[35;48;1m" + s + "\33[0m");
    }

    public static void BlueGreen(String s) {
        System.out.print("\33[36;48;1m" + s + "\33[0m");
    }

    public static void Gray(String s) {
        System.out.print("\33[37;48;1m" + s + "\33[0m");
    }

    public static void Recover(String s) {
        System.out.print("\33[38;48;1m" + s + "\33[0m");
    }

    public static String getBlack(String s) {
        return ("\33[30;48;1m" + s + "\33[0m");
    }

    public static String getRed(String s) {
        return ("\33[31;48;1m" + s + "\33[0m");
    }

    public static String getGreen(String s) {
        return ("\33[32;48;1m" + s + "\33[0m");
    }

    public static String getYellow(String s) {
        return ("\33[33;48;1m" + s + "\33[0m");
    }

    public static String getBlue(String s) {
        return ("\33[34;48;1m" + s + "\33[0m");
    }

    public static String getPurple(String s) {
        return ("\33[35;48;1m" + s + "\33[0m");
    }

    public static String getBlueGreen(String s) {
        return ("\33[36;48;1m" + s + "\33[0m");
    }

    public static String getGray(String s) {
        return ("\33[37;48;1m" + s + "\33[0m");
    }

    public static String getRecover(String s) {
        return ("\33[38;48;1m" + s + "\33[0m");
    }

    @Override
    public void run() {
        while (true) {
            common();
            //System.out.println("default");
            try {
                Thread.sleep(0);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
    /*
       //拓展颜色代码
    System.out.print("\33[40;1m"+"文字1"+"\33[0m");//直接在所需文字边上添加颜色代码（左）和颜色恢复代码（右）
    System.out.print("\33[41;1m"+"文字2"+"\33[0m");
    System.out.print("\33[42;1m"+"文字3"+"\33[0m");
    System.out.print("\33[43;1m"+"文字4"+"\33[0m");
    System.out.print("\33[44;1m"+"文字5"+"\33[0m");
    System.out.print("\33[45;1m"+"文字6"+"\33[0m");
    System.out.print("\33[46;1m"+"文字7"+"\33[0m");
    System.out.print("\33[47;1m"+"文字8"+"\33[0m");
    System.out.println("\33[47;1m"+"文字test1");//也可以不添加恢复代码
    System.out.println("文字test2");//继承颜色
    【23-3-25__】1）增加了setColor(s)方法二，可以将传入的String类型变颜色打印；(在【23-4-02 11:17:__】已优化为Color())
            2）增加了getColor(s),可以将传入的String 对象添加颜色代码，并return;
    【23-4-02 11:17:__】1）优化了setColor()方法，以重载方式，归类到了Color()方法，代码更加简洁,使用方法见方法一
        2）增加了进程后台更改颜色，只需要启动线程，之后打印的语句都会随机变色
                                                                  ——写这个会显得更高级一点
 */